<?php
// +-----------------------------------------------------------------------+
// |                                                                       |
// | WebFormsQA     (Question - Answer)                                    |
// | Copyright  (C) 2010                                                   |
// | Official site  www.scale-tech.ru                                      |
// | email          scale-tech@mail.ru                                     |
// | autor          Alexander Demachev                                     |
// |                                                                       |
// | This program is free software; you can redistribute it and/or modify  |
// | it under the terms of the GNU General Public License as published by  |
// | the Free Software Foundation; version 2 of the License.               |
// |                                                                       |
// | This program is distributed in the hope that it will be useful,       |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of        |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         |
// | GNU General Public License for more details.                          |
// +-----------------------------------------------------------------------+

/*!
 * @page AuthCommonPage Исходный код класса AuthCommon
 * @include auth.class.php
 */

/*! @addtogroup ClassWebFormsQA Основные классы проекта
 *  Группа включает основные классы используемые в проекте WebFormsQA
 *  @{
 */


// работа с графикой
require_once(GRAPH_DIR.'jpgraph_antispam.php');
require_once(INCLUDES_DIR.'auth.class.php');



/**
 * @class AuthCommon
 * @brief Класс содержит общие методы для авторизации пользователя \n
 * @ref AuthCommonPage
 */
class AuthCommon {


    /**
     * @brief Метод добавляет информацию успешно зарегистрированного пользователя в переменные сессии
     *        используются следующие ключи:
     * -      $_SESSION['id_user']
     * -      $_SESSION['authorization_user']
     * -      $_SESSION['authorization_admin']
     * -      $_SESSION['email']
     * @param $id_user		- идентификатор пользователя из базы данных
     * @param $login		- имя пользователя
     * @param $flag_admin	- признак административного доступа
     * @param $email  	    - почтовый адрес пользователя 
     */
	static function addAuthSessionInfo($id_user, $login, $flag_admin, $email )
	{
    	// сохраняю данные авторизации
        $_SESSION['id_user'] = $id_user;
        $_SESSION['authorization_user'] = $login;
        $_SESSION['authorization_admin'] = $flag_admin;
        $_SESSION['email'] = $email;
	}

	
	/**
	 * @brief Метод удаляет переменные сессии зарегистрированного пользователя
	 */
	static function unsetAuthSessionInfo()
	{
    	unset($_SESSION["id_user"]);
	    unset($_SESSION["authorization_user"]);
	    unset($_SESSION["authorization_admin"]);
	    unset($_SESSION["email"]);
	}
	
	
	
    /**
     * @brief Метод проверяет по переменным сессии зарегистрирован ли пользователь с правами администратора
     * @param bool $flag_admin	- признак административного доступа [out]
     * @return bool     		- успех авторизации
     */
    static function checkAuthUser(&$flag_admin)
    {
       	$flag 		= false;
       	$flag_admin = false;
       	
       	if( isset($_SESSION['id_user']) && 
	    	isset($_SESSION['authorization_user']) && 
	    	isset($_SESSION['authorization_admin']) ) {

			$flag = true;
	    	if( $_SESSION["authorization_admin"] ) $flag_admin = true;
	    		
	    }
		return $flag;
    }

    /**
     * @brief Метод возвращает почтовый адрес текущего пользователя  
     * @return email  - почтовый адрес
     */
    static function checkEmail()
    {
       	$email = "";
       	if( isset($_SESSION['id_user']) && 
	    	isset($_SESSION['email']) ) {
	    		 
			if( $_SESSION['email'] ) $email = $_SESSION['email'];
	    }
		return $email;
    }    


    /**
     * @brief Метод возвращает информацию о зарегистрированном пользователе
     * @param int    $id		- идентификатор пользователя [out]
     * @param string $user		- имя пользователя [out]
	 * @param string $email		- почтовый адрес пользователя [out]
     * @param bool $flag_admin- признак административного доступа [out]
     * @return bool     		- успех авторизации
     */
    static function getInfoAuthUser(&$id, &$user, &$flag_admin, &$email )
    {
    	$id 		= 0;
       	$flag 		= false;
       	$flag_admin = false;
       	
       	if( isset($_SESSION['id_user']) && 
	    	isset($_SESSION['authorization_user']) ) {
	    
	    	$id = $_SESSION['id_user'];
			$flag = true;
	    	if( $_SESSION["authorization_admin"] ) $flag_admin = true;
			if( $_SESSION['email'] ) $email = $_SESSION['email'];

			$user = $_SESSION['authorization_user'];
	    		
	    }
		return $flag;
    }




    /**
     * @brief Метод генерации анти спам строки  
     * @param $name_image	- возвращается название файла с изображением, случайной строки
     * @return 				- случайную строку символов
     */
    static function genAntySpam()
    {
		// создаем случайную строку и ее изображение
		$antispam   = new AntiSpam();
		$rval       = $antispam->Rand(5);
		
		//$name_image = TMP_DIR.'img'.$temp_rval.'.jpeg';
		$antispam->Stroke( AuthCommon::getNameFile() );
		$_SESSION["image_code"] = $rval;
		return $rval;
    }    

    /**
     * @brief Метод проверки анти спам строки  
     * @param $input_code	- строка введенная пользователем в поле ввода
     * @return 				- успех операции
     */
    static function checkAntySpam($input_code)
    {
		$flag = false;
        if( isset($_SESSION["image_code"]) ) {
		    if( !strcasecmp($_SESSION['image_code'], $input_code ) ) {
				$flag = true;
				unset( $_SESSION["image_code"] );
				unlink( AuthCommon::getNameFile() );
		    }
		}

		return $flag;
    }

    
    /**
     * @brief Метод проверки получения атрибута 'categoryID' из строки запроса
     * методом GET или POST, или из переменных сессии   
     * @param Page $page	- объект страницы
     * @return 				- признак получения атрибута в текущем запросе
     */
    static function getAttrCategoryIDandSession($page, &$categoryID)
    {
    	$flag=false;
    	$categoryID=0;
    	
		if( isset( $_SESSION['categoryID'] ) ) {
			$categoryID = $_SESSION['categoryID'];
		}
		
        if( $page->attr["categoryID"]["set"] ) {
        	$flag=true;
			if( $page->attr["categoryID"]["value"] ) {
				$categoryID = $page->attr["categoryID"]["value"];
				$_SESSION['categoryID'] = $categoryID;
			} else {
				$categoryID = 0;
				unset( $_SESSION['categoryID'] );
			}
        }
        
        return $flag;
    }    


	/** 
     * @brief 	метод возвращает имя файла jpg в котором будет храниться изображение с кодовой комбинацией подтверждения
     *          имя файла зависит от текущей сессии
     * @return  имя файла, включая путь
	 */
	static function getNameFile()
	{
		$id = md5( session_id() );
		$str = TMP_DIR.$id.'image_auth_code.jpeg';
		return $str;
	}


    /**
     * @brief Метод проверяет правильность административного пароля и логина
     * @return int     		0 - login и пароль правильные
     *                      1 - неправильный логин
     *                      2 - неправильный пароль
     */
    static function checkAuthAdmin($login, $pass)
    {
		$code = 0;
		// указан административный пароль
		if( base64_encode($login) != ADMIN_LOGIN ) $code = 1;
		elseif( md5($pass) != ADMIN_PASS ) $code = 2;

		return $code;
    }

   
    
    
} // end class AuthCommon

/*! @} */

?>
